// var i;
// exports.VisibleNode = void 0;
// var c = cc._decorator;
// var s = c.ccclass;
// var l = c.property;
// var u = c.menu;
// var d = (function () {
//     function e() {
//         this.name = "";
//         this.nd = [];
//     }
//     __decorate(
//         [
//             l({
//                 displayName: "控制名称"
//             })
//         ],
//         e.prototype,
//         "name",
//         void 0
//     );
//     __decorate(
//         [
//             l({
//                 type: cc.Node,
//                 displayName: "控制节点"
//             })
//         ],
//         e.prototype,
//         "nd",
//         void 0
//     );
//     return __decorate([s("VisibleNode")], e);
// })();
// exports.VisibleNode = d;
// var p = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.nodes = [];
//         t._choiceIndex = 0;
//         return t;
//     }
//     __extends(t, e);
//     Object.defineProperty(t.prototype, "choiceIndex", {
//         get: function () {
//             return this._choiceIndex;
//         },
//         set: function () {},
//         enumerable: !1,
//         configurable: !0
//     });
//     t.prototype.setSelectedIndex = function (e) {
//         if (!(e < 0 || e >= this.nodes.length)) {
//             this.selectedIndex = e;
//             for (var t = 0; t < this.nodes.length; t++) {
//                 for (var o = 0; o < this.nodes[t].nd.length; o++) {
//                     this.nodes[t].nd[o].active = !1;
//                 }
//             }
//             for (o = 0; o < this.nodes[e].nd.length; o++) {
//                 this.nodes[e].nd[o].active = !0;
//             }
//         }
//     };
//     t.prototype.setSelectedName = function (e) {
//         for (var t = 0; t < this.nodes.length; t++) {
//             for (var o = 0; o < this.nodes[t].nd.length; o++) {
//                 this.nodes[t].nd[o].active = !1;
//             }
//         }
//         for (t = 0; t < this.nodes.length; t++) {
//             if (this.nodes[t].name == e) {
//                 this.selectedIndex = t;
//                 for (o = 0; o < this.nodes[t].nd.length; o++) {
//                     this.nodes[t].nd[o].active = !0;
//                 }
//             }
//         }
//     };
//     t.prototype.getSelectedIndex = function () {
//         return this.selectedIndex;
//     };
//     t.prototype.getSelectedNodes = function () {
//         if (this.selectedIndex) {
//             return this.nodes[this.selectedIndex].nd;
//         } else {
//             return [];
//         }
//     };
//     __decorate(
//         [
//             l({
//                 type: [d],
//                 displayName: "Controller"
//             })
//         ],
//         t.prototype,
//         "nodes",
//         void 0
//     );
//     __decorate(
//         [
//             l({
//                 type: cc.Integer
//             })
//         ],
//         t.prototype,
//         "_choiceIndex",
//         void 0
//     );
//     __decorate(
//         [
//             l({
//                 type: cc.Integer
//             })
//         ],
//         t.prototype,
//         "choiceIndex",
//         null
//     );
//     return __decorate([s, u("Controller/Visible Controller")], t);
// })(cc.Component);
// exports.default = p;



// const { ccclass, property, menu } = cc._decorator;

// /**
//  * 控制节点类
//  * 建议类名: ControlNode
//  */
// @ccclass('VisibleNode')
// class VisibleNode {
//     /** 控制名称 */
//     @property({
//         displayName: "控制名称"
//     })
//     public name: string = "";

//     /** 控制节点 */
//     @property({
//         type: cc.Node,
//         displayName: "控制节点"
//     })
//     public nd: cc.Node[] = [];
// }

// export { VisibleNode };

// /**
//  * 可见控制器类
//  * 建议类名: VisibleController
//  */
// @ccclass
// @menu("Controller/Visible Controller")
// export default class VisibleController extends cc.Component {
//     /** 控制器节点数组 */
//     @property({
//         type: [VisibleNode],
//         displayName: "Controller"
//     })
//     public nodes: VisibleNode[] = [];

//     /** 当前选择的索引 */
//     @property({
//         type: cc.Integer
//     })
//     private _choiceIndex: number = 0;

//     /** 当前选择的索引 */
//     @property({
//         type: cc.Integer
//     })
//     public get choiceIndex(): number {
//         return this._choiceIndex;
//     }
//     public set choiceIndex(value: number) {
//         // 这里可以添加 setter 的逻辑
//     }

//     /**
//      * 设置选择的索引
//      * @param index 选择的索引
//      * 建议方法名: setChoiceIndex
//      */
//     public setSelectedIndex(index: number): void {
//         if (index < 0 || index >= this.nodes.length) {
//             return;
//         }
//         this._choiceIndex = index;
//         for (let i = 0; i < this.nodes.length; i++) {
//             for (let j = 0; j < this.nodes[i].nd.length; j++) {
//                 this.nodes[i].nd[j].active = false;
//             }
//         }
//         for (let j = 0; j < this.nodes[index].nd.length; j++) {
//             this.nodes[index].nd[j].active = true;
//         }
//     }

//     /**
//      * 设置选择的名称
//      * @param name 选择的名称
//      * 建议方法名: setChoiceName
//      */
//     public setSelectedName(name: string): void {
//         for (let i = 0; i < this.nodes.length; i++) {
//             for (let j = 0; j < this.nodes[i].nd.length; j++) {
//                 this.nodes[i].nd[j].active = false;
//             }
//         }
//         for (let i = 0; i < this.nodes.length; i++) {
//             if (this.nodes[i].name === name) {
//                 this._choiceIndex = i;
//                 for (let j = 0; j < this.nodes[i].nd.length; j++) {
//                     this.nodes[i].nd[j].active = true;
//                 }
//             }
//         }
//     }

//     /**
//      * 获取选择的索引
//      * @returns 当前选择的索引
//      * 建议方法名: getChoiceIndex
//      */
//     public getSelectedIndex(): number {
//         return this._choiceIndex;
//     }

//     /**
//      * 获取选择的节点
//      * @returns 当前选择的节点数组
//      * 建议方法名: getChoiceNodes
//      */
//     public getSelectedNodes(): cc.Node[] {
//         if (this._choiceIndex >= 0 && this._choiceIndex < this.nodes.length) {
//             return this.nodes[this._choiceIndex].nd;
//         } else {
//             return [];
//         }
//     }
// }


const { ccclass, property, menu } = cc._decorator;

/**
 * 控制节点类
 * 建议类名: ControlNode
 */
@ccclass('VisibleNode')
class VisibleNode {
    /** 控制名称 */
    @property({
        displayName: "控制名称"
    })
    public name: string = "";

    /** 控制节点 */
    @property({
        type: cc.Node,
        displayName: "控制节点"
    })
    public nd: cc.Node[] = [];
}

export { VisibleNode };

/**
 * 可见控制器类
 * 建议类名: VisibleController
 */
@ccclass
@menu("Controller/Visible Controller")
export default class VisibleController extends cc.Component {
    /** 控制器节点数组 */
    @property({
        type: [VisibleNode],
        displayName: "Controller"
    })
    public nodes: VisibleNode[] = [];

    /** 当前选择的索引 */
    @property({
        type: cc.Integer
    })
    private _currentSelectIdx: number = 0;

    /** 当前选择的索引 */
    @property({
        type: cc.Integer
    })
    public get choiceIndex(): number {
        return this._currentSelectIdx;
    }
    public set choiceIndex(value: number) {
        // 此处可以根据需要添加 setter 逻辑
    }

    /**
     * 设置选择的索引
     * @param idx 选择的索引
     * 建议方法名: setChoiceIndex
     */
    public setChoiceIndex(idx: number): void {
        if (idx < 0 || idx >= this.nodes.length) {
            return;
        }
        this._currentSelectIdx = idx;
        this.nodes.forEach((node) => node.nd.forEach((n) => (n.active = false)));
        this.nodes[idx].nd.forEach((n) => (n.active = true));
    }

    /**
     * 设置选择的名称
     * @param name 选择的名称
     * 建议方法名: setChoiceName
     */
    public setChoiceName(name: string): void {
        this.nodes.forEach((node) => node.nd.forEach((n) => (n.active = false)));

        const targetNode = this.nodes.find((node, index) => {
            if (node.name === name) {
                this._currentSelectIdx = index;
                return true;
            }
            return false;
        });

        if (targetNode) {
            targetNode.nd.forEach((n) => (n.active = true));
        }
    }

    /**
     * 获取选择的索引
     * @returns 当前选择的索引
     * 建议方法名: getChoiceIndex
     */
    public getChoiceIndex(): number {
        return this._currentSelectIdx;
    }

    /**
     * 获取选择的节点
     * @returns 当前选择的节点数组
     * 建议方法名: getChoiceNodes
     */
    public getChoiceNodes(): cc.Node[] {
        if (this._currentSelectIdx >= 0 && this._currentSelectIdx < this.nodes.length) {
            return this.nodes[this._currentSelectIdx].nd;
        } else {
            return [];
        }
    }
}